﻿using NHibernate.Criterion;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using TES.Core;
using TES.Domain;
using TES.Service;
using TES.WebUI.Apps;

namespace TES.WebUI.Controllers
{
    public class UserController :BaseController
    {
        // GET: User
     
        #region 登录
        [HttpGet]
        public ViewResult Login()
        {
            return View();
        }

        [HttpPost]
        public ActionResult Login(string account, string password)
        {
            password = AppHelper.EncodeMd5(password);//用MD5加密
            //访问数据库，根据用户名和密码获取用户信息
            TES.Domain.User loginedUser = TES.Core.Container.Instance.Resolve<IUserService>().Login(account, password);
            if (loginedUser != null)//当用户名和密码正确时
            {
                //保存用户登录信息
                AppHelper.LoginedUser = loginedUser;
                //获取当前登录对象的角色信息，待用
                IList<Role> roleList = loginedUser.Roles;

                //页面跳转到主页面
                //return "1";
                return RedirectToAction("Index", "Home");
            }
            else
            {
                //如果登录不成功，则向用户提示错误信息
                ViewBag.ErrorMsg = "用户名或密码错误";
                return View();
            }
        }
        public ActionResult Index(int pageIndex = 1, string userName = "")
        {
            //1获取查询条件
            //2组织查询条件(必须的修改)
            IList<ICriterion> queryConditions = new List<ICriterion>();
            if (!string.IsNullOrEmpty(userName))
            {
                //模 糊匹配
                //queryConditions.Add(Expression.Like("Account",userName));
                queryConditions.Add(new LikeExpression("Account", userName));
            }

            int count = 0;//用于存放满足条件的记录总
            //3设置排序表达式集合(必须的修改)
            IList<Order> listOrder = new List<Order>() {
                new Order("ID", true)
            };//设置一个排序集合，new Order("ID", true)表示：根据ID排序,true代表升序,false代表降序

            //4通过容器调用分页方法(修改查询的数据类型)
            IList<User> list = Container.Instance.Resolve<IUserService>()
                .GetPaged(queryConditions, listOrder, pageIndex, PagerHelper.PageSize, out count);

            //5将list对象存放到PageList对象中,同时将分页的相关属性也包含在其中
            PageList<User> pageList =
                list.ToPageList<User>(pageIndex, PagerHelper.PageSize, count);

            //6返回到视图或则跳转到其他的Action
            return View(pageList);//用pageList集合填充页面。
        }


        private IList<ICriterion> GetCondition(string userName = "")//生成查询条件,userName变量默认为空
        {
            IList<ICriterion> queryConditions = new List<ICriterion>();//实例化一个查询条件集合
            if (!string.IsNullOrEmpty(userName))//如果userName变量不为空
            {
                //queryConditions.Add(Expression.Like("UserName",userName));
                queryConditions.Add(new LikeExpression("UserName", userName));//在查询条件集合中加入一个模糊查询条件
            }
            return queryConditions;//返回查询条件集合
        }
        #endregion
    }
}